package com.demo.java.OD251_300.OD296;

import java.util.*;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【优秀学员统计】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146090574
 */
public class OdMain {
    public static void main(String[] args) {
        // 创建 Scanner 对象，用于读取输入
        Scanner scanner = new Scanner(System.in);

        // 读取考勤记录的天数 n
        int n = scanner.nextInt();

        // 创建一个数组，存储每一天打卡的人数（30天的数据）
        int[] punchCardCount = new int[30];

        // 读取每天的打卡人数
        for (int i = 0; i < 30; i++) {
            punchCardCount[i] = scanner.nextInt();
        }

        // 创建一个 HashMap，用来统计每个用户的打卡次数
        Map<Integer, Integer> punchCardDict = new HashMap<>();

        // 读取每一天的打卡记录
        for (int i = 0; i < 30; i++) {
            // 对于每一天，读取打卡的用户 ID，并更新该用户的打卡次数
            for (int j = 0; j < punchCardCount[i]; j++) {
                int id = scanner.nextInt();  // 读取当前打卡用户的 ID
                // 更新该用户的打卡次数，getOrDefault 如果用户 ID 不存在，默认为 0
                punchCardDict.put(id, punchCardDict.getOrDefault(id, 0) + 1);
            }
        }

        // 将用户 ID 和其对应的打卡次数转化为 List
        List<Map.Entry<Integer, Integer>> sortedPunchCard = new ArrayList<>(punchCardDict.entrySet());

        // 对用户打卡数据进行排序
        Collections.sort(sortedPunchCard, new Comparator<Map.Entry<Integer, Integer>>() {
            @Override
            public int compare(Map.Entry<Integer, Integer> o1, Map.Entry<Integer, Integer> o2) {
                // 如果打卡次数相同，按照用户 ID 升序排序
                if (o1.getValue().equals(o2.getValue())) {
                    return o1.getKey().compareTo(o2.getKey());
                } else {
                    // 否则，按打卡次数降序排序
                    return o2.getValue().compareTo(o1.getValue());
                }
            }
        });

        // 输出打卡次数最多的前5个用户 ID，若用户数少于5，则输出所有用户
        for (int i = 0; i < Math.min(5, sortedPunchCard.size()); i++) {
            System.out.print(sortedPunchCard.get(i).getKey() + " ");
        }
    }
}